﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace JEdwonTune.Lib.Hibernate {
    public class Ctrls {
        public static IList<KeyValuePair<String, String>> DbServerType() {
            IList<KeyValuePair<String, String>> list = new List<KeyValuePair<String, String>>();
            Array vals = Enum.GetValues(typeof(DbServerType));
            foreach (Object val in vals) {
                list.Add(new KeyValuePair<string, string>(((int)val).ToString(), Enum.GetName(typeof(DbServerType),val)));
            }
            return list;
        }

        public static IList<MyListItem> IDGenerator() {
            IList<MyListItem> list = new List<MyListItem>();
            list.Add(new MyListItem("", "无", "不设置"));
            list.Add(new MyListItem("uuid.hex", "uuid.hex", "用一个System.Guid的ToString()方法法生成字符串类型的标识符， 字符串的长度由format参数定义。 "));
            list.Add(new MyListItem("increment", "increment", "用于为int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。 "));
            list.Add(new MyListItem("identity", "identity", "对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。数据库返回的主键值 返回的标识符是int类型的。 "));
            list.Add(new MyListItem("sequence", "sequence", "在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列（sequence)， 而在Interbase中使用生成器(generator)。返回的标识符是int类型的。 "));
            list.Add(new MyListItem("hilo", "hilo", "使用一个高/低位算法来高效的生成int类型的标识符。给定一个表和字段（默认分别是是hibernate_unique_key 和next_hi）作为高位值得来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在用户自行提供的连接中，不要使用这种生成器。你可以使用where参数来指定表里面用了多少列数据， You can use the \"where\" parameter to specify the row to use in a table. This is useful if you want to use a single tabel for your identifiers, with different rows for each table. "));
            list.Add(new MyListItem("seqhilo", "seqhilo", "使用一个高/低位算法来高效的生成int类型的标识符，给定一个数据库序列（sequence)的名字。 "));
            list.Add(new MyListItem("uuid.string", "uuid.string", "用一个新的System.Guid实例的byte[]转化为字符串作为标示符。 "));
            list.Add(new MyListItem("guid", "guid", "使用新的System.Guid实例作为标示符。 "));
            list.Add(new MyListItem("guid.comb", "guid.comb", "使用Jimmy Nilsson的算法（请参阅http://www.informit.com/articles/article.asp?p=25862）生成一个新的System.Guid标示符。 "));
            list.Add(new MyListItem("native", "native", "根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 "));
            list.Add(new MyListItem("assigned", "assigned", "让应用程序在 Save()之前为对象分配一个标示符。 "));
            list.Add(new MyListItem("foreign", "foreign", "使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。 "));
            return list;
        }
        public static IList<MyListItem> PolymorphismList() {
            IList<MyListItem> list = new List<MyListItem>();
            list.Add(new MyListItem("","不设置",""));
            list.Add(new MyListItem("implicit","隐式多态关系(implicit,默认)",""));
            list.Add(new MyListItem("explicit","显式多态关系(explicit)",""));
            return list;
        }
    }
}
